<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<!-- 

使用Proxy进行拦截：编写一个Proxy对象，拦截对象的读取和设置操作，并记录操作日志。

使用Reflect进行操作：使用Reflect对象进行一些基本操作，如判断对象是否存在某属性、调
用函数等。

Proxy与Reflect联合应用：结合Proxy和Reflect实现一个简单的对象观察者模式，当对象属性
变化时触发相应的操作。

-->
<script>
    // 使用Proxy进行拦截
    // 定义一个日志对象，用于记录操作
    // var obj = {
    //     get: [],
    //     set: []
    // };
    // //目标对象
    // var target = {
    //     name: 'jay',
    //     age: 18
    // };
    // var p = new Proxy(target, {
    //     get(target, property, receiver) {
    //         return Reflect.get(target, property, receiver);
    //     },
    //     set(target, property, value, receiver) {
    //         return Reflect.set(target, property, value, receiver);
    //     }
    // });
    // console.log(p.name);
    // p.age = 31;








    // 使用Reflect进行操作
    // 定义一个普通对象
    // const obj = {
    //     name: 'jay',
    //     age: 30,
    //     say() {
    //         console.log(`hi ${this.name}`);
    //     }
    // };

    // // 判断对象是否存在某属性
    // var a = Reflect.has(obj, 'name'); // true
    // var b = Reflect.has(obj, 'height'); // false
    // console.log(a); // true
    // console.log(b); // false
    // Reflect.apply(obj.say, obj, []); //hi jay









    // Proxy与Reflect联合应用
    // var obj = {
    //     name: 'jay',
    //     age: 18
    // }
    // const p = new Proxy(obj, {
    //     get(target, key, receiver) {
    //         return Reflect.get(target, key)
    //     },
    //     set(target, key, value, receiver) {
    //         return Reflect.set(target, key, value)
    //     }
    // })
    // // 访问
    // console.log(p.name);
    // // 修改
    // console.log(p.name = 'joLin');
    // console.log(p.name);
</script>

</html>